AWS CLI で IAM Policy Simulator を利用して AWS アカウント内の IAM ロールが特定のアクションをできるか確認してみた
IAM Policy Simulator を利用して、IAM ロールが特定のアクションをできるか確認してみました。
IAM ロールに指定アクションの許可があるか確認するコマンド
次のコマンドで、AWS アカウント内の AWSServiceRoleFor から始まる IAM ロール以外のロールに対して、actionName で指定したアクションを実行できるか確認できます。actionName を変更することで、他のアクションも確認できます。下記の例では IAM ロールの作成とロールへのポリシーのアタッチ、インラインポリシーの追加アクションを指定しています。
actionName="iam:CreateRole iam:AttachRolePolicy iam:PutRolePolicy"
aws iam list-roles --query='Roles[?!(starts_with(RoleName,`AWSServiceRoleFor`))].[Arn]' --output text \
| while read roleArn; do
echo "${roleArn}"
aws iam simulate-principal-policy \
--policy-source-arn ${roleArn} \
--action-names ${actionName} \
--query EvaluationResults[].[EvalActionName,EvalDecision] \
--output text
done
実行結果例です。allowed は許可、implicitDeny は暗黙的な拒否を示します。
arn:aws:iam::111122223333:role/test-admin-role-for-idc
iam:CreateRole allowed
iam:AttachRolePolicy allowed
iam:PutRolePolicy allowed
arn:aws:iam::111122223333:role/test-developer-basic-role
iam:CreateRole implicitDeny
iam:AttachRolePolicy implicitDeny
iam:PutRolePolicy implicitDeny
output を table 指定にすることで次の出力例となります。
arn:aws:iam::1111222233339:role/test-admin-role-for-idc
-------------------------------------
| SimulatePrincipalPolicy |
+-----------------------+-----------+
| iam:CreateRole | allowed |
| iam:AttachRolePolicy | allowed |
| iam:PutRolePolicy | allowed |
+-----------------------+-----------+
arn:aws:iam::111122223333:role/test-developer-basic-role
------------------------------------------
| SimulatePrincipalPolicy |
+-----------------------+----------------+
| iam:CreateRole | implicitDeny |
| iam:AttachRolePolicy | implicitDeny |
| iam:PutRolePolicy | implicitDeny |
+-----------------------+----------------+
なお、上記コマンドで確認しているアクションは次の権限です。
アクション名 | 概要 |
---|---|
CreateRole | IAM ロールを作成 |
AttachRolePolicy | IAM ロールに IAM ポリシーをアタッチ |
PutRolePolicy | IAM ロールにインラインポリシーを追加、更新 |
コマンドの解説
IAM Policy Simulator を実行するコマンドとして、simulate-principal-policy を利用しています。
- simulate-principal-policy — AWS CLI 2.17.44 Command Reference
- simulate-principal-policy — AWS CLI 1.34.12 Command Reference
policy-source-arn で指定した IAM エンティティに対して、action-names で指定したアクションの許可があるかを確認できます。
一つの IAM ロールを指定して実行するコマンドです。
aws iam simulate-principal-policy \
--policy-source-arn arn:aws:iam::111122223333:role/test-admin-role-for-idc \
--action-names iam:AttachRolePolicy
出力結果例です。冒頭のコマンドでは EvalDecision だけを query オプションで抽出して表示させています。
{
"EvaluationResults": [
{
"EvalActionName": "iam:AttachRolePolicy",
"EvalResourceName": "*",
"EvalDecision": "allowed",
"MatchedStatements": [
{
"SourcePolicyId": "AdministratorAccess",
"SourcePolicyType": "IAM Policy",
"StartPosition": {
"Line": 3,
"Column": 17
},
"EndPosition": {
"Line": 8,
"Column": 6
}
}
],
"MissingContextValues": [],
"OrganizationsDecisionDetail": {
"AllowedByOrganizations": true
}
}
]
}
上記コマンドを AWS アカウント内の複数の IAM ロールに対して、while 文で実行しています。
AWS アカウント内の AWSServiceRoleFor から始まる IAM ロールを除外した一覧を次のコマンドで取得しています。
aws iam list-roles --query='Roles[?!(starts_with(RoleName,`AWSServiceRoleFor`))].[Arn]' --output text
出力結果例です。
arn:aws:iam::111122223333:role/test-admin-role-for-idc
arn:aws:iam::111122223333:role/test-developer-basic-role
AWSServiceRoleFor から始まる IAM ロールを除外する query の条件は下記ブログを参考にしました。
以上で実行コマンドの解説は終わりです。
さいごに
特定のアクションを実行できるロールを確認したく、調べているうちに、IAM Policy Simulator AWS CLI で利用できることを知ったため、早速試してみました。
他にも S3 の GetObject ができる IAM ロールやユーザーの洗い出しといった用途にも活用できそうです。
以上、このブログがどなたかのご参考になれば幸いです。